package com.qf.listener;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class Consumer3 {

    @RabbitListener(queues = "directQue",ackMode = "MANUAL")
    public void consumer3(Message msg, Channel channel) throws IOException {
        //消费方需要基于重试带来的幂等性问题进行解决
        //常用的解决方式是基于唯一标识去解决
        String messageId = msg.getMessageProperties().getMessageId();
        //拿到唯一标识后，去匹配这个标识的记录是否存在，如果存在，那就不执行业务（数据库操作-新增），直接返回确认
        //拿到唯一标识后，去匹配这个标识的记录是否存在，如果不存在，那就执行业务

        //如果是更新，这个标记一般使用数据库记录的id

        //拒绝消息，消息就会转发到死信交换机中
        System.out.println("收到消息，拒绝，不入队");

        channel.basicNack(msg.getMessageProperties().getDeliveryTag(),true,false);
    }
}
